//
//  HMTabbar.swift
//  Weibo05
//
//  Created by IvesMac on 2017/6/4.
//  Copyright © 2017年 IvesMac. All rights reserved.
//

import UIKit

/// 定义代理协议
// 要遵守一个基协议 NSObjectProtocol ,否则不能使用 weak
protocol HMTabBarDeletage: NSObjectProtocol {
    // 生命点击按钮的方法
    func composeOperation()
    
}

/// 自定义tabbar (中间的图片)
class HMTabbar: UITabBar {
    
    // 代理对象,要使用weak来修饰
    weak var hmDelegate: HMTabBarDeletage?
    
    // 点击中间按钮执行的闭包, ? 可选类型
    var composeCallBack:(()->())?

    //  MARK: -- 使用懒加载添加按钮
    private lazy var composeButton: UIButton = {
        // 创建button
        let button = UIButton()
        // 添加按钮的点击事件
        button.addTarget(self, action: #selector(composeButtonAction), for: .touchUpInside)
        
        // 设置不同状态下的背景图片
        button.setBackgroundImage(UIImage(named:"tabbar_compose_button"), for: .normal)
        button.setBackgroundImage(UIImage(named:"tabbar_compose_button_highlighted"), for: .highlighted)
        // 设置不同状态下的图片
        button.setImage(UIImage(named:"tabbar_compose_icon_add"), for: .normal)
        button.setImage(UIImage(named:"tabbar_compose_icon_add_highlighted"), for: .highlighted)
        // 设置和内容一样大(没有大小将不会显示)
        button.sizeToFit()
        
        return button
    }()
    
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // 添加控件
    private func setupUI() {
        addSubview(composeButton)
        
        // 设置背景图片,防止push黑影
        backgroundImage = UIImage(named:"tabbar_background")
    }
    
    @objc private func composeButtonAction() {
        
        // ? 判断闭包是否为nil 如果不为nil,则执行
        composeCallBack?()
        
        // 代理对象的代理方法
//        hmDelegate?.composeOperation()
    }
    
    // 调整子控件布局
    override func layoutSubviews() {
        // 千万不要忘记写父类的!
        super.layoutSubviews()
        
        
        //  MARK: -- 别忘了使用extension的方式
        
        // 设置composeButton的中心点
        composeButton.centerX = width * 0.5
        composeButton.centerY = height * 0.5
        
        // 计算每个按钮的宽度
        let buttonWidth = width / 5
        
        // 记录按钮的索引
        var index = 0
        
        // 遍历tabbar的子视图设置系统按钮的宽度和x坐标
        for subView in self.subviews {
            // UItabbarButton系统定义的私有控件不能直接使用
            if subView.isKind(of: NSClassFromString("UITabBarButton")!) {
                // 设置按钮的宽度
                subView.width = buttonWidth
                // 计算每个按钮的x
                subView.x = buttonWidth * CGFloat(index)
                // 记录系统按钮的索引
                index += 1
                
                // 判断如果下标等于2(自定义的按钮),后移一位
                if index == 2 {
                    index += 1
                }
            }
        }
    }
    
    
}
